home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / basic / apb17.zip / ATTACH.ASM < prev    next >
Assembly Source File  |  1990-12-20  |  2KB  |  139 lines

  1.     Title Routine to attach an interrupt vector to a Trap channel
  2.     Page 60,130
  3. Comment *
  4.     Created 11-12-1987 k. murray
  5.     Updates:
  6.         None.
  7.  
  8.     Usage:
  9.         Attach IntNo%,TrapChannelNo%
  10. *    
  11.  
  12.     ; Macro to define the trap channel handlers
  13. TrapH    Macro Ch
  14. Trap&Ch:
  15.     Push    Ax
  16.     Push    Dx
  17. if Ch LE 16
  18.     Xor    Dx,Dx        ; high order is zero
  19.     Mov    Ax,1 Shl (Ch-1)
  20. else
  21.     Xor    Ax,Ax
  22.     Mov    Dx,1 Shl (Ch-17)
  23. endif
  24.     Jmp    IntCom
  25. Endm
  26.  
  27. Cseg    Segment byte public 'Code'
  28.     Assume Cs:Cseg,Ds:nothing,Es:nothing
  29. Comment *
  30.     Stack Frame:
  31.     Bp+8    Interrupt #
  32.     Bp+6    Trap Channel # adr.
  33.     Bp+4    Return Segment
  34.     Bp+2    Return Offset
  35.     Bp+0    Saved Bp
  36. *
  37.  
  38. Start:
  39. Attach proc far
  40.     Push    Bp
  41.     Mov    Bp,Sp
  42.     Mov    Cs:SvDs,Ds        ; save data segment
  43.     Mov    Bx,[Bp+6]        ; get adr. of channel #
  44.     Mov    Bx,[Bx]            ; Get the channel #
  45.     Dec    Bx            ; make relative to zero
  46.     And    Bx,01fh            ; keep only lower 5 bits
  47.     Shl    Bx,1            ; mult by 2
  48.     Mov    Dx,Cs:[Bx+offset TrapHList]    ; get adr. for desired trap #
  49.     Mov    Bx,[Bp+8]        ; get adr. of interrupt #
  50.     Mov    Ax,[Bx]            ; Get interrupt # in Al
  51.     Mov    Ah,25h            ; Ah=Set interrupt vector call
  52.     Push    Ds
  53.     Mov    Bx,Cs
  54.     Mov    Ds,Bx            ; Ds:Dx=pointer to interrupt handler
  55.     Int    21h            ; set vector
  56.     Pop    Ds
  57.     Pop    Bp
  58.     Ret    2*2            ; remove 2 parameters
  59. Attach endp
  60.  
  61. SvDs    Dw    0
  62. TrapHList    Dw    offset Trap1
  63.     Dw    offset Trap2
  64.     Dw    offset Trap3
  65.     Dw    offset Trap4
  66.     Dw    offset Trap5
  67.     Dw    offset Trap6
  68.     Dw    offset Trap7
  69.     Dw    offset Trap8
  70.     Dw    offset Trap9
  71.     Dw    offset Trap10
  72.     Dw    offset Trap11
  73.     Dw    offset Trap12
  74.     Dw    offset Trap13
  75.     Dw    offset Trap14
  76.     Dw    offset Trap15
  77.     Dw    offset Trap16
  78.     Dw    offset Trap17
  79.     Dw    offset Trap18
  80.     Dw    offset Trap19
  81.     Dw    offset Trap20
  82.     Dw    offset Trap21
  83.     Dw    offset Trap22
  84.     Dw    offset Trap23
  85.     Dw    offset Trap24
  86.     Dw    offset Trap25
  87.     Dw    offset Trap26
  88.     Dw    offset Trap27
  89.     Dw    offset Trap28
  90.     Dw    offset Trap29
  91.     Dw    offset Trap30
  92.     Dw    offset Trap31
  93.     Dw    offset Trap32
  94.  
  95. IntCom:
  96.     Push    Ds
  97.     Mov    Ds,Cs:SvDs
  98.     Or    Ds:[0],Ax
  99.     Or    Ds:[2],Dx        ; Set trap bit
  100.     Pop    Ds
  101.     Pop    Dx
  102.     Pop    Ax
  103.     Iret                ; return from interrupt
  104. TrapH    1    
  105. TrapH    2
  106. TrapH    3    
  107. TrapH    4    
  108. TrapH    5    
  109. TrapH    6    
  110. TrapH    7    
  111. TrapH    8    
  112. TrapH    9    
  113. TrapH    10
  114. TrapH    11
  115. TrapH    12
  116. TrapH    13
  117. TrapH    14
  118. TrapH    15
  119. TrapH    16
  120. TrapH    17
  121. TrapH    18
  122. TrapH    19
  123. TrapH    20
  124. TrapH    21
  125. TrapH    22
  126. TrapH    23
  127. TrapH    24
  128. TrapH    25
  129. TrapH    26
  130. TrapH    27
  131. TrapH    28
  132. TrapH    29
  133. TrapH    30
  134. TrapH    31
  135. TrapH    32
  136.  
  137. Cseg    Ends
  138.     End    Start
  139.